/*
光标操作：
	file.seekg(offset,direction);  输入文件流，设置输入流的读取位置
	file.seekp(offset,direction);  输出文件流，设置输出流的写入位置
		offset:偏移量,可以是正数或负数，表示从当前位置移动的字节数
		direction：位置标记，可以是以下三个之一：
				ios::beg：文件的起始位置
				ios::cur：文件的当前位置
				ios::end：文件的末尾位置
*/

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
	fstream file("test.txt", ios::in | ios::out | ios::binary);
	if (file.is_open())
	{
		// 写入数据
		file << "Hello, World!";
		file.flush(); // 刷新输出缓冲区

		// 移动到文件开头，使用 seekg 进行读取操作
		file.seekg(0, ios::beg);
		string str;
		file >> str;
		cout << "Read from beginning: " << str << endl;

		// 移动到文件末尾，使用 seekp 进行追加操作
		file.seekp(0, ios::end);
		file << " Append this.";

		// 再次移动到文件开头进行读取
		file.seekg(0, ios::beg);
		string str2;
		file >> str2;
		cout << "Read after append: " << str2 << endl;

		file.close();
	}
	else
	{
		cerr << "Could not open the file." << endl;
	}
	return 0;
}